package com.netty.example.time.pojosolusion;

import com.netty.example.time.UnixTime;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelOutboundHandlerAdapter;
import io.netty.channel.ChannelPromise;

public class PojoTimeEncoder extends ChannelOutboundHandlerAdapter {

    @Override
    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
        UnixTime m = (UnixTime) msg;
        ByteBuf encoded = ctx.alloc().buffer(4);
        encoded.writeInt((int) ((UnixTime) msg).value());
        /*
        1.在这一行中有很多重要的事情。

            首先，我们按原样传递原始内容ChannelPromise，
            以便当编码数据实际写到线路上时，Netty将其标记为成功或失败。

            其次，我们没有致电ctx.flush()。
            有一个单独的处理程序方法void flush(ChannelHandlerContext ctx)，
            旨在覆盖该flush()操作。
         */
        ctx.write(encoded, promise);
    }
}
